То что в результате сохранения данных из класса документа вызывается функция Serialize мы с Вами уже знаем. Вот такой код гененирует AppWizard.
///////////////////////////////////////////
// CTestSaveDoc serialization
void CTestSaveDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
Но мы то с Вами хотим больше и больше и еще больше контроля над процессом бритья ой :-) сохранения. Так вот в классе CDocument есть возможность улучшить контроль над сохранением файлов и добавить свои специфические действия. Это делается путем перегрузки виртуальных функций. Как их увидеть ??? Выделите класс потомок от CDocument, после этого нажмите правую кнопку мыши и выберите пункт меню Add Virtual Funсtion. Нас интересуют функции связанные с сохранением документа, а это OnSaveDocument(LPCTSTR lpszPathName) и SaveModified().

Перегрузите их для исследования и добавьте следующий код с сообщениями
//////////////////////////////////
// CTestSaveDoc commands
BOOL CTestSaveDoc::SaveModified()
{
AfxMessageBox("SaveModified()");
return CDocument::SaveModified();
}
BOOL CTestSaveDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
AfxMessageBox("OnSaveDocument(LPCTSTR lpszPathName)");
return CDocument::OnSaveDocument(lpszPathName);
}
Для полноты картины создадим пукт меню, который будет сообщать о том, что документ изменен. Мы это делали уже.
void CTestSaveDoc::OnEditModified()
{
SetModifiedFlag();
}
Вот. Давайте разбираться когда вызывается какая функция. OnSaveDocument() вызывается всегда когда сохраняется документ, в том числе и пунктами меню Save и Save As... из приложений созданных App Wizard. Так же Вы сами можете вызывать эту функцию во всяких специфических ситуациях, например, при получении сигнала с блока питания о перебоях с питанием :-). Эта функция вызовет Serialize.
virtual BOOL OnSaveDocument( LPCTSTR lpszPathName );
Функция SaveModified() вызывается перед закрытием измененного документа и именно она выводит диалоговое окно о том, что документ был изменен. Ее вам надо переопределять для того, чтобы вставить свои специфические действия. Какие ??? Ну, например, сообщить серверу кто правил документ, записать это в БД чтобы потом найти крайнего и виноватого :-). Общая схема такая.
Сохранение документа OnSaveDocument Serialize Закрытие документа SaveModified OnSaveDocument Serialize